#include <iostream>
#include "Container.h"

//*********以下是栈的实现************

//template<class T,class container>
template<class T,template<class> class container>
//当使用了模板的模板参数时，这里不可以将其缺省值列出来(类似于函数参数的缺省处理)
void Stack<T,container>::Push(const T &x)
{
    _con.PushFront(x);    
}

//template<class T,class container>
template<class T,template<class> class container>
void Stack<T,container>::Pop()
{
    _con.PopFront();
}

//template<class T,class container>
template<class T,template<class> class container>
bool Stack<T,container>::Top(T & tmp)
{
    if(_con.Empty())
    {
        return false;
    }
    tmp=_con.Front();
    return true;
}

///template<class T,class container>
template<class T,template<class> class container>
size_t Stack<T,container>::Size()
{
    return _con.Size();
}

//template<class T,class container>
template<class T,template<class> class container>
bool Stack<T,container>::Empty()
{
    return _con.Empty();
}

//template<class T,class container>
template<class T,template<class> class container>
void Stack<T,container>::Display()
{
    _con.Display();
}

//*********以下是队列的实现************

//template<class T,class container>
template<class T,template<class> class container>
void Queue<T,container>::Push(const T &x)
{
    _con.PushBack(x);
}

//template<class T,class container>
template<class T,template<class> class container>
void Queue<T,container>::Pop()
{
    _con.PopFront();
}

//template<class T,class container>
template<class T,template<class> class container>
bool Queue<T,container>::Front(T &tmp)
{
    if(Empty())
    {
        return false;
    }
    tmp=_con.Front();
    return true;
}

//template<class T,class container>
template<class T,template<class> class container>
size_t Queue<T,container>::Size()
{
    return _con.Size();
}

//template<class T,class container>
template<class T,template<class> class container>
bool Queue<T,container>::Empty()
{
    return _con.Empty();
}

//template<class T,class container>
template<class T,template<class> class container>
void  Queue<T,container>::Display()
{
     _con.Display();
}
